//初始化路由实例 导出
import Vue from 'vue'
import VueRouter from 'vue-router'
//导入操作用户登录信息token等操作工具快
import auth from '@/utils/auth'

// 组件懒加载提高运行速度 打包分模块 模块不整体加载 页面加载资源被分化互不影响 提升运行效率
// 导入组件
const Login = () => import('@/views/login')
const Layout = () => import('@/views/Layout')
const Welcome = () => import('@/views/welcome')
const NotFound = () => import('@/views/404')
const Article = () => import('@/views/article')
const Image = () => import('@/views/image')
const Publish = () => import('@/views/publish')
const Comment = () => import('@/views/comment')
// const Fans = () => import('@/views/fans')
const Fans = () => import(/* webpackChunkName: "fans" */'@/views/fans')
const Setting = () => import('@/views/setting')
// // 导入登录组件
// import Login from '@/views/login'
// // 导入layout 组件
// import Layout from '@/views/Layout'
// //导入404组件
// import NotFound from '@/views/404'
// import Article from '@/views/article'
// import Fans from '@/views/fans'
// import Setting from '@/views/setting'
// import Image from '@/views/image'
// import Publish from '@/views/publish'
// import Comment from '@/views/comment'
// import Welcome from '@/views/welcome'

Vue.use(VueRouter)


//这个位置会有很多的路由代码
// 这个数组定义路由规则（约定什么地址指向哪个组件）
const routes = [
    {
        path:'/login',component:Login
    },
    {
        path:'/',component:Layout,
        children:[
            // 欢迎页面
            {path:'/',component:Welcome},
            {path:'/article',component:Article},
            {path:'/fans',component:Fans},
            {path:'/setting',component:Setting},
            {path:'/image',component:Image},
            {path:'/publish',component:Publish},
            {path:'/comment',component:Comment}
        ]
    },
    //最后面 通配规则 显示404组件
    {path:'*',component:NotFound}

]
//初始化路由实例
const router  = new VueRouter({routes})

// 导航守卫功能 
// to将要进入的路由对象目标 from正在离开的路由对象目标 next 是否放行
// next()下一步,放行 next('地址')拦截，跳转去哪
router.beforeEach((to,from,next)=>{
    // 保存用户信息(含有token)
    const user =auth.getUser()
    // 不是访问登录且没有token信息 则拦截到登录
    //这里的return不是返回 是组织代码运行的效果
    if(to.path!=='/login'&&!user.token) return next('/login')
    // 不是上述情况 其他情况一概放行
    next()
})
// router.beforeEach((to,from,next)=>{
//     // 阻止路由跳转自身
//     if(to.path===from.path){
//         next(false)
//     }else{
//     next()}
// })

export default router
